package com.huawei.tree.binary_tree_array;

//二叉树
public class BinaryTree {
    private HeroNode root;

    public void setRoot(HeroNode root) {
        this.root = root;
    }

    //前序遍历
    public void preOrder() {
        if (this.root != null) {
            this.root.preOrder();
        }else {
            System.out.println("二叉树为空，不能遍历");
        }
    }

    //中序遍历
    public void midOrder() {
        if (this.root != null) {
            this.root.midOrder();
        }else {
            System.out.println("二叉树为空，不能遍历");
        }
    }

    //后序遍历
    public void afterOrder() {
        if (this.root != null) {
            this.root.afterOrder();
        }else {
            System.out.println("二叉树为空，不能遍历");
        }
    }

    //前序遍历查找
    public HeroNode preOrderSearch(int no) {
        return this.root.preOrderSearch(no);
    }

    //中序遍历查找
    public HeroNode midOrderSearch(int no) {
        return this.root.midOrderSearch(no);
    }

    //后序遍历查找
    public HeroNode afterOrderSearch(int no) {
        return this.root.afterOrderSearch(no);
    }

    //递归删除节点（规定1）
    public void delNode1(int no) {
        if (this.root != null && this.root.getNo() == no) {
            this.root = null;
            return;
        }
        this.root.delNode1(no);
    }

    //递归删除节点（规定2）
    public void delNode2(int no) {
        if (this.root != null && this.root.getNo() == no) {
            if (this.root.getLeft() != null) {
                this.root = this.root.getLeft();
                return;
            }
            if (this.root.getRight() != null) {
                this.root = this.root.getRight();
                return;
            }
        }
        this.root.delNode2(no);
    }
}
